Die seriellen Schnittstellen (ASCI und CSI/O) des HD64180 von Gerald Schröder Der HD64180 stellt drei serielle Schnittstellen zur Verfügung. Bei zweien handelt es sich um "Asynchronous Serial Connection Interfaces" (wie RS-232/V24) und die dritte heißt "C1ocked Serial Input/Output". Aschronous Serial Communication Interfces Aufabe dieser beiden Scbnittstellen ist die serielle Verbindung zu einem Modem, Termial, (RS-232-)Drucker o.Ä. Zusätzlich gibt es einen "Multipro- zessor-Modus", mit dem sich leicht ein System mit mehreren HD64180s auf- bauen ließe, wobei die ASCIs dann als (Verbindung zum) Sytem-Bus dienen würden. Jeder Kanal belegt 5 Ports: einen zum Lesen und eien zum Scbreiben der Daten, einen für den Status (Zustand) des Kanals, zwei für die Eistellung des Kanals (Baudrate usw.) und einige Zusatz-Informationen. Die Kanäle unterscheiden sich in einigen Features, was ich aber jeweils anmerken werde. Die einzelnen Ports (Kanal 0 und Kanal 1): Name Port Bezeichnung CNTLA0 0 Control Register A Channel 0 CNTLB0 2 Control Register B Channel 0 STAT0 4 Status Register Channel 0 TDR0 6 Transmit Data Register Channel 0 RDR0 8 Receive Data Register Channel 0O CRTLA1 1 Control Register A Channel 1 CRTLB1 3 Control Register B Channel 1 STAT1 5 Status Register Channel 1 TDR1 7 Transmit Data Register Channel 1 RDR1 9 Receive Data Register Channel 1 Die einzelnen Bits der Ports: CNTLA (Control A) 7 6 5 4 3 2 1 0 MPE RE TE Kanal 0: RTS=* Read: MPBR MOD2 MOD1 MOD0 Kanal 1: CKA1D Write: EFR MPE = Multiprocessor Mode Enable RE = Receiver Enable TE = Transmitter Enable RTSO* = Request To Send Channel 0 (aktiv Low, nur Kanal 0!) CKA1D = Asynchronous Clock Channel 1 Disable (nur Kanal 1!) MPBR = Multiprocessor Bit Receive (nur beim Lesen!) EFR = Error Flag Reset (rur beim Schreiben!) MODx = ASCII Data Format Mode Anmerkung: Bit 4 (D4) hat bei Kanal 0 eine andere Bedeutung als bei Kanal 1. Bit 3 (D3) bedeutet beim Schreiben etwas anderes als beim Lesen. CNTLB (Control B) 7 6 5 4 3 2 1 0 MPBT MP Read: CTS* PEO DR SS2 SS1 SS0 Write: PS MPBT = Multiprocessor Bit Transmit MP = Multiprocessor Mode CTS = Clear To Send (nur beim Lesen!) PS = Prescale (nur beim Scbreiben!) PEO = Parity Evea/Odd DR = Divide Ratio SSx = Source/Speed Select STAT (Status) 7 6 5 4 3 2 1 RDRF OVRN PE FE RIE Kanal 0: DCD0* TDRE TIE Kanal 1: CTS1E RDRF = Receive Data Register Full (nur lesbar) OVRN = Overrun Error (nur lesbar) PE = Parity Error (nur lesbar) FE = Framing Error (nur lesbar) RIE = Receive Interrupt Enable DCD0* = Data Carrier Detect (aktiv Low, nur lesbar, nur Kanal 0!) CTS1E = Clear To Send Channel 1 Enable (nur Kanal 1!) TDRE = Transmit Data Register Empty (nur lesbar) TIE = Transmit Interrupt Enable Einstellung der Kanäle Über CNTLB wird die Baudrate, der Multiprozessor-Mode und die Parität festgelegt. D0 bis D3 und D5 sind für die Baudrate zuständig. Sie legen fest, durch welche Werte die Taktfrequenz geteilt wird. D5 1.Teiler D3 2.Teiler D2 D1 D0 3.Teiler 0 10 0 16 0 0 0 1 1 20 1 64 0 0 1 2 0 1 0 4 0 1 1 8 1 0 0 16 1 0 1 32 1 1 0 64 1 1 1 externer Takt Der externe Takt wird von den Pins CKA0 (gemultiplext mit DREQ0*) bzw. CKA1 (gemultiplext mit TENDt) abgenommen, wobei sich die Baudrate aus dem externen Takt geteilt durcb 16 oder 64 (abhängig von D3) eribt. Dies ist der Reset-Zustand. Falls die Baudrate vom System-Takt abgeleitet wird, wird der resultierende Takt über CKA0/1 ausgegeben! Zwei Rechenbeispiele (bei einem Systemtakt von 9,216 MHz): 19200 Baud: 19200 = 9.316.000 DIV 30 DIV 16 DIV 1 => D5-D0 = 1x0000 300 Baud: 300 = 9.216.000 DIV 30 DIV 64 DIV 16 => D5-D0 = 1x1100 D4 ist für die Art der Parität zuständig, falls Paritäts-Prüfung gewünscht wird: D4=0: gerade Parität (EVEN); D4=1: ungerade Parität (ODD). Zu guter Letzt D6 und D7, die für den Multiprozessor-Modus zuständig sind: Wenn D6=1, dann wird statt des Paritäts-Bits ein Multiprozessor-Bit gesen- det/empfangen. Wenn D7=1, wird beim Seden das Multiprozessor-Bit auf 1 gesetzt. Das könnte z.B. bedeuten; "Achtung, an alle anderen Prozessoren, es kommt aas für alle!" Weitere Einstellungen erfolen über CNTLA. Mit D2 bis D0 wird das Daten- format festgelegt: Bit bedeutet D2=0 7-Bit-Daten =1 8-Bit-Daten D1=0 keine Parität =1 Paritt D0=0 1 Stopit =1 2 Stop-Bits Wenn D3 mit 0 beschrieben wird, werden alle Fehlermeldungen für diesen Kanal (im Register STAT0/1) gelöscht. Mit D4 kann bei Kanal 0 der Pin RTS0* gesetzt/gelöscht werden (Request to Send = Gegenseite darf senden). Bei Kanal 1 hingegen erfolgt hier die Auswahl, ob der Pin CKA1/TEND0* als Takt- eingang (CKA1, D4=0) oder als Kennung für das Ende eines Blocktransfers (TEND0, D4=1) benutzt wird. Mit D5 wird der Sender ein/ausgeschaltet, mit D6 der Empfänger. D7 hat nur i Multiprozessor-Modus eine Funktion. Wenn n D7=1, werden nur Daten mit gesetztem MPB-Bit (s. D7 in CNTLB) angenommen, z.B. im Modus: "Empfange nur Daten für alle Prozessoren!". Bei D7=0 werden alle Daten angenomme. So ist folgende Kommunikation denkbar: Der Master-Prozessor sendet an alle Prozessare durch gesetztes MPB-Bit gekennzeichnet, welche beiden Przes- soren sich unterhalten dürfen. Diese schalten dann D7 auf 0 und wickeln ihre Kommunikation ohne MPB-Bit ab. Dann schalten sie D7 auf 1 und der Master-Prozessor wird benachrichtigt, die Sache wieder zu übernehen. Zu guter Letzt noch die Einstellungen, die über das Status-Register STAT vorgenommen werden. D0 legt fest, ob ein Interrupt erfolgt, wenn der Kanal sedebereit ist. Wenn D3=1, wird auch ein Interrupt ausgelöst, wenn ein Zeichen emfangen wurde oder ein Fehler auftrat. Bei Kanal 1 kann über D2 ausgewählt werden, ob der Pin CTS1*/RXS als CTS* (D2=1, Clear TO Send = HD64180 darf senden oder als Daten-Epfangs-Pin für CSI/0 (D2=0) dient. Senden/Empfangen Der Stats des Kanals kann über STAT befragt werden. D1=1 bedetet, daß Daten gesedet werden dürfen. Wenn dann ein Byte in das Sende-Register TDR geschrieben wird, geht D1 auf 0, bis das Zeichen gesendet wurde. D7=1 bedeutet, daß ein Zeichen empfangen wurde und jetzt aus dem Empfangs- Register RDR gelesen werden kann oder daß bei Empfangen ein Fehler auf- getreten ist. Nach dem Lesen des Bytes aus RDR wird D7 gelöscht. Folgende Fehler werden erkannt: D6 Overrun (letztes Byte wurde nicht schnell genug aus RDR geholt) D5 Parity (das Paritäts-Bit des Zeichens warfalsch) D4 Framing (das/die Stop-Bits stimmten nicht) Falls ein Febler auftrat, muß dieser gelöscht werden, indem D3 von CNTLLA mit 0 beschrieben wird. Achtung: dabei werden dann auch die anderen Ein- stellungen von CNTLA geändert! Über D2 aus STAT kann bei Kanal 0 noch der Zustand des Signals "Data Carrier Detect" abgefragt werden. D2 wird auf 1 gesetzt, wenn das Signal am Pin DCD0* irgendwann mal HIGH war oder noch ist. D2 wird nach dem Lesen auf 0 gesetzt, wenn inzwischen DCD0*=0 ist. Solange D2=1, wird nichts empfan- gen. Diese Verbindung ist nur bei bestimmten Modems sinnvoll. Über D3 aus CTNLA kann das Multiprozessor-Bit des letzten empfangenen Bytes abgefragt werden. D5 aus CNTLA gibt Ausunft über den Zustand des Pins CTS*. Für Kanal 0 gilt, daß der Kanal erst sendebereit wird STA0, D1=1), wenn der Pin CTS0*=0. CTS1 kann nur abgefragt werden und hat nur einen Einfluß auf die Sedebereitschaft, wenn D2 aus STAT1 auf 1 gesetzt wurde (CTS1E = CTS-Enable Kanal 1). Clocked Serial Input Output Diese Schnittstelle dient zur Verbindung mehrerer Prozessoren, wobei die anderen Prozessoren nicht unbedigt HD6480s sein mssen. Aber sie müssen über eine gemeinsame (sychronisierte) Taktauelle verfügen und die Sende-/ Empfangs-Operation muß in beiden Prozessoren gleichzeitig beginnen! Der HD64180 kann nicht gleichzeitig empfangen und seden. Es gibt nur ein Sede/Empfangregister: TRDR (Transmit/Receive Data Register), Port 0Bh. Es sind auch nur einige Einstellungen möglich, so daß nur ein Kontroll- Regiser nötig ist: CNTR (Control), Port 0Ah. Der Aufbau dieses Registers: CNTR (Control) 7 6 5 4 3 2 1 1 -------------------------------------- EF EIE RE TE - SS2 SS1 SS0 EF = End Flag (nur lesbar) EIE = End Interrupt Enable RE = Receive Eable TE = Transit Enable SSx = Speed Select Einstellungen Es kann nur die Baudrate eingestellt werden. Wenn die Baudrate neu gesetzt wird, sollte nicht gleicheitig ein Sende-/Empfaggs-Zyklus (s.u. gestartet werden. Der System-Takt wird durch die folenden Werte geteilt (bier für 9.216 MHz): SS2 SS1 SS0 Teiler ergibt Baudrate ----------------------------------- 0 0 0 20 460800 0 0 1 40 230400 0 1 0 80 115200 0 1 1 160 57600 1 0 0 320 28800 1 0 1 640 14400 1 1 0 1280 7200 1 1 1 externer Takt (kleiner als 460800) Bei 111 wird der extere Takt über den Pin CKS eingelesen; asonsten wid der resultierende Takt hier ausgegeben. Empfangen/Senden Zuerst muß abgefragt werden, ob der Sender gerade aktiv ist. Erst wenn D7 aus CNTR gesetzt ist, kann die Operation beginnen. Zum Senden wird das Byte in TRDR geschrieben und dann D4 in CNTR gesetzt. Gleichzeitig wird die Bauarate (wieder) gesetzt. Sie sollte aber nicht verändert werden, da es sonst Sende-Probleme geben kann. Die Operation ist erst beendet, wenn D7 wieder auf 1 geht. Falls D6 gesetzt wurde, wird dann ein Interrupt ausge- löst. Beim Empfangen wird D5 gesetzt (zusammen mit der Baudrate). Nun beginnt der Empfangs-Vorgang, der immer gleich lang dauert. Wenn D7 wieder auf 1 geht, kann das Byte aus TRDR gelesen werden. Wenn vor dem Empfangen D6 gesetzt wurde, wird ein Interrupt ausgelöst, sobald D7 auf 1 springt. Es ist zu beachten, daß der Empfangs-Pin (RXS) mit CTS* für Kanal 1 gemulti- plext ist. Vor dem Empfang muß also über D2 von STAT1 die Funktion "Pin RXS/CTS1* als RXS* ausgewählt werden.